/**
 * 先序遍历算法口诀 根->左->右
 * 1.访问根节点
 * 2.对根节点的左子树进行先序遍历
 * 3.对根节点的右子树进行先序遍历
 */

//先序遍历
const bt = require('./bt')

//递归版
// const preorder = (root)=>{

//     if(!root) return
//     //先根
//     console.log(root.val);
//     //再左
//     preorder(root.left)
//     //最后右
//     preorder(root.right)
// }


//非递归版 使用栈 -数据结构
const preorder = (root) => {
    if (!root) return

    const stack = [root]

    while (stack.length > 0) {
        const n = stack.pop()
        console.log(n.val)

        //栈先进后出，所以先把右子树推入栈中
        if (n.right) stack.push(n.right)
        if (n.left) stack.push(n.left)
    }
}


preorder(bt)